// package cn.oyzh.easyshell.ssh.exec;
//
//
// import cn.oyzh.common.util.StringUtil;
// import cn.oyzh.easyshell.file.ShellFileUtil;
// import cn.oyzh.easyshell.sftp.ShellSFTPChannel;
// import cn.oyzh.easyshell.ssh.ShellSSHClient;
// import cn.oyzh.easyshell.util.ShellUtil;
//
// import java.util.List;
//
// /**
//  * @author oyzh
//  * @since 2023/8/16
//  */
// public class ShellSSHExec implements AutoCloseable {
//
//     private ShellSSHClient client;
//
//     public ShellSSHExec(ShellSSHClient client) {
//         this.client = client;
//     }
//
//     public String cpu_info() {
//         if (this.client.isMacos()) {
//             return this.client.exec("sysctl machdep.cpu");
//         }
//         if (this.client.isWindows()) {
//             String output = this.client.exec("wmic cpu");
//             String[] lines = output.split("\n");
//             String[] cols1 = lines[0].split("\\s+");
//             String[] cols2 = lines[1].splitWithDelimiters("\\s+", -1);
//             StringBuilder sb = new StringBuilder();
//             for (int i = 0; i < cols1.length; i++) {
//                 sb.append(cols1[i]).append(" : ").append(cols2[i]).append("\n");
//             }
//             return sb.toString();
//         }
//         if (this.client.isUnix()) {
//             return this.client.exec("sysctl hw.model hw.machine hw.ncpu hw.clockrate");
//         }
//         return this.client.exec("lscpu");
//     }
//
//     public List<ShellSSHDiskInfo> disk_info() {
//         if (this.client.isWindows()) {
//             String output = this.client.exec("wmic logicaldisk  get name, size, freespace, volumeName");
//             return ShellSSHExecParser.diskForWindows(output);
//         } else {
//             String output = this.client.exec("df -h");
//             if (this.client.isMacos()) {
//                 return ShellSSHExecParser.diskForMacos(output);
//             }
//             return ShellSSHExecParser.diskForLinux(output);
//         }
//     }
//
//     public String network_interface_info() {
//         if (this.client.isWindows()) {
//             return this.client.exec("ipconfig /all");
//         }
//         String output = this.client.exec("ifconfig");
//         if (ShellUtil.isCommandNotFound(output)) {
//             output = this.client.exec("ip addr");
//         }
//         return output;
//     }
//
//     public String memory_info() {
//         if (this.client.isMacos()) {
//             return this.client.exec("system_profiler SPMemoryDataType");
//         }
//         if (this.client.isWindows()) {
//             String output = this.client.exec("wmic memorychip");
//             String[] lines = output.split("\n");
//             String[] cols1 = lines[0].split("\\s+");
//             String[] cols2 = lines[1].splitWithDelimiters("\\s+", -1);
//             StringBuilder sb = new StringBuilder();
//             for (int i = 0; i < cols1.length; i++) {
//                 sb.append(cols1[i]).append(" : ").append(cols2[i]).append("\n");
//             }
//             return sb.toString();
//         }
//         if (this.client.isUnix()) {
//             return this.client.exec("dmesg | grep -i memory");
//         }
//         String output = this.client.exec("lshw -C memory");
//         if (ShellUtil.isCommandNotFound(output)) {
//             output = this.client.exec("dmidecode -t memory");
//         }
//         return output;
//     }
//
//     public String gpu_info() {
//         if (this.client.isMacos()) {
//             return this.client.exec("system_profiler SPDisplaysDataType");
//         }
//         if (this.client.isWindows()) {
//             String output = this.client.exec("nvidia-smi");
//             if (!ShellUtil.isCommandNotFound(output)) {
//                 return output;
//             }
//             output = this.client.exec("wmic path win32_VideoController");
//             String[] lines = output.split("\n");
//             String[] cols1 = lines[0].split("\\s+");
//             String[] cols2 = lines[1].splitWithDelimiters("\\s+", -1);
//             StringBuilder sb = new StringBuilder();
//             for (int i = 0; i < cols1.length; i++) {
//                 sb.append(cols1[i]).append(" : ").append(cols2[i]).append("\n");
//             }
//             return sb.toString();
//         }
//         if (this.client.isUnix()) {
//             return this.client.exec("pciconf -lv | grep -i vga");
//         }
//         String output = this.client.exec("nvidia-smi");
//         if (ShellUtil.isCommandNotFound(output)) {
//             output = this.client.exec("lspci | grep -i '3d'");
//         }
//         if (StringUtil.isBlank(output)) {
//             output = this.client.exec("lspci | grep -i vga");
//         }
//         return output;
//     }
//
//     public String cat_profile() {
//         return this.client.exec("cat /etc/profile");
//     }
//
//     public String cat_environment() {
//         if (this.client.isWindows()) {
//             return this.client.exec("set");
//         }
//         return this.client.exec("cat /etc/environment");
//     }
//
//     public String cat_resolv() {
//         return this.client.exec("cat /etc/resolv.conf");
//     }
//
//     public String cat_hosts() {
//         if (this.client.isWindows()) {
//             return this.client.exec("type C:\\Windows\\System32\\drivers\\etc\\HOSTS");
//         }
//         return this.client.exec("cat /etc/hosts");
//     }
//
//     public String cat_sshd_config() {
//         if (this.client.isWindows()) {
//             return this.client.exec("type C:\\ProgramData\\ssh\\sshd_config");
//         }
//         return this.client.exec("cat /etc/ssh/sshd_config");
//     }
//
//     public String cat_bash_bashrc() {
//         return this.client.exec("cat /etc/bash.bashrc");
//     }
//
//     public String cat_user_profile() {
//         return this.client.exec("cat ~/.profile");
//     }
//
//     public String cat_user_bash_profile() {
//         return this.client.exec("cat ~/.bash_profile");
//     }
//
//     public String cat_user_bashrc() {
//         return this.client.exec("cat ~/.bashrc");
//     }
//
//     public String cat_user_zshrc() {
//         return this.client.exec("cat ~/.zshrc");
//     }
//
//     public String source(String file) {
//         return this.client.exec("source " + file);
//     }
//
//     public String cat_docker_daemon(String filePath) {
//         if (this.client.isWindows()) {
//             filePath = ShellFileUtil.fixWindowsFilePath(filePath);
//             return this.client.exec("type \"" + filePath + "\"");
//         }
//         return this.client.exec("cat " + filePath);
//     }
//
//     public String echo(String text) {
//         return this.client.exec("echo " + text);
//     }
//
//     public String echo(String text, String file) {
//         return this.client.exec("echo \"" + text + "\" > " + file);
//     }
//
//     public String cat_file(String sourceFile, String targetFile) {
//         if (this.client.isMacos() || this.client.isLinux()) {
//             return this.echo("$(cat " + sourceFile + ")", targetFile);
//         }
//         if (this.client.isWindows()) {
//             sourceFile = ShellFileUtil.fixWindowsFilePath(sourceFile);
//             targetFile = ShellFileUtil.fixWindowsFilePath(targetFile);
//             return this.client.exec("type \"" + sourceFile + "\" > " + targetFile + "\"");
//         }
//         return this.client.exec("cat " + sourceFile + " > " + targetFile);
//     }
//
//     public String append(String text, String file) {
//         return this.client.exec("echo \"" + text + "\" >> " + file);
//     }
//
//     public String append_file(String sourceFile, String targetFile) {
//         if (this.client.isMacos() || this.client.isLinux()) {
//             return this.echo("$(cat " + sourceFile + ")", targetFile);
//         }
//         if (this.client.isWindows()) {
//             sourceFile = ShellFileUtil.fixWindowsFilePath(sourceFile);
//             targetFile = ShellFileUtil.fixWindowsFilePath(targetFile);
//             return this.client.exec("type \"" + sourceFile + "\" >> \"" + targetFile + "\"");
//         }
//         return this.client.exec("cat " + sourceFile + " >> " + targetFile);
//     }
//
//     public String whoami() {
//         return this.client.exec("whoami");
//     }
//
//     @Override
//     public void close() throws Exception {
//         this.client = null;
//     }
//
//     /**
//      * 修改权限，这个方法不能兼容windows，请用以下方法
//      *
//      * @param permission 权限
//      * @param filePath   文件路径
//      * @return 结果
//      * @see ShellSFTPChannel#chmod(int, String)
//      */
//     @Deprecated
//     public String chmod(String permission, String filePath) {
//         return this.client.exec("chmod " + permission + " " + filePath);
//     }
//
//
// }
